<?php
require_once PATH_CLASSES.'CDatabaseMysql.php';


/**
 * @package classes dataObject
 * Projet MicroAssur
 */
/**
 * Classe abstraite pour la gestion des DataObject.
 *
 * @desc        Cette classe abstraite doit être étendue par les classes métiers des DataObjects
 *              qui reprennent les tables du MPD.
 *
 * @version     1.0
 * @category    Fichier de Classe PHP
 * @author      fatim Sall <sfatim@ds2i-offshore.com>
 * @copyright   DS2I-Offshore© - 2010
 */

abstract class dataObject {

    /**
     * @desc     Permet de stocker l'instance de connexion à la base de donnée.
     * @var      object
     * @access   public
     */
    public static $_oConnexion;

    /**
     * @desc     Permet de stocker les erreurs rencontrées.
     * @var      array
     * @access   public
     */
    public $_erreurs;

    protected static $_instances = array();
    
    /**
     * @desc     Permet de stocker le dernier identifiant de connexion.
     * @var      object
     */
    public static $_linkHost = null;
    
	/**
     * @desc     Nom du serveur hebergeant le SGBDR.
     * @var      string
     */
    public static $_host = _SGBD_HOST;
    
    /**
     * @desc     Nom de la base de données hebergée par le serveur.
     * @var      string
     */
    public static $_db = _SGBD_BDD;
    
    /**
     * @desc     Identifiant pour la connexion au SGBDR.
     * @var      string
     */
    public static $_user = _SGBD_USER;
    
    /**
     * @desc     Password pour la connexion au SGBDR.
     * @var      string
     */
    public static $_pass = _SGBD_PASS;
    

    /**
     * Création de l'instance de la classe:
     *
     * @desc     Initialise les objets du framework utilisés par les DataObjects interfacant cette classe.
     * @access   public
     * @name     dataObject::__construct()
     * @param     void
     * @return     void.
     */
    public function __construct()
    {
        // Récupération de l'instance de connexion au SGBR.
        self::$_oConnexion = self::getInstance();
    }


    /**
     * Insertion dans la table TABLE du MPD avec les attributs courant du DataObject.
     *
     * @name      dataObject_dataObject::insert()
     * @param     void
     * @return    boolean     résultat de l'insertion.
     */
    public function insert(){}


    /**
     * Mise à jour de la table TABLE du MPD avec les attributs courant du DataObject.
     *
     * @name      dataObject_dataObject::update()
     * @param     void
     * @return    boolean     résultat de la mise à jour.
     */
    public function update(){}


    /**
     * Suppression dans la table TABLE du MPD selon une clef primaire donnée.
     *
     * @name      dataObject_dataObject::delete()
     * @param     void
     * @return    boolean     résultat de la suppression.
     */
    public function delete(){}


    /**
     * Convertit l'objet en tableau
     *
     * @name dataObject_dataObject::toArray()
     * @param void
     * @return array tableau associatif contenant les champs de l'objet
     */
    public function toArray()
    {
        $aTab = (array)$this;

        foreach($aTab as $key => $val)
        {
            $aTab2[substr($key, 1)] = $val;
        }

        return $aTab2;
    }
	
    public static function &getInstance( $bdd_param = null )
    {
        if ( $bdd_param != null )
        {
            self::$_host = $bdd_param["host"];
            self::$_user = $bdd_param["user"];
            self::$_pass = $bdd_param["pass"];
            self::$_db   = $bdd_param["database"];
        }
        $sConnectId = self::$_host.':'.self::$_db;

        if (!isset(self::$_instances[$sConnectId]))
        {
           	self::$_instances[$sConnectId] = new CDatabaseMysql();
        }
         
        // L'attribut PDO::ATTR_PERSISTENT permet d'activer les connexions persistantes
       /* if (defined('_ENABLE_PERSISTENT'))
            $bPersist = _ENABLE_PERSISTENT;
        else
            $bPersist = true;
        
        self::$_instances[$sConnectId] -> setAttribute( PDO::ATTR_PERSISTENT, $bPersist);
		*/
        self::$_linkHost = self::$_instances[$sConnectId];
        return  self::$_linkHost;
    }

    public static function showDate($sYYYYMMDD)
    {
    	if($sYYYYMMDD != null)
        	return date("d-m-Y", strtotime($sYYYYMMDD));
        else return '';
    }
}
?>
